1. Script compression - semi-adaptive Huffman


; Find string pointer

[0200C9] 40c9 CD 0C 40    CALL 400Ch       AF=0000 BC=0008 DE=A1A0 HL=006C SP=DED7 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7

; Init decoder

[0200CC] 40cc CD 81 43    CALL 4381h       AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED7 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Clear dictionary RAM

[0200CF] 40cf AF          XOR A            AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED7 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[0200D0] 40d0 32 AA A1    LD (A1AAh),A     AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DED7 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Decompress byte - initial

[0200D3] 40d3 CD DF 39    CALL 39DFh       AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DED7 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; -------------------------------------------------------------

[02000C] 400c C5          PUSH BC          AF=0000 BC=0008 DE=A1A0 HL=006C SP=DED5 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02000D] 400d D5          PUSH DE          AF=0000 BC=0008 DE=A1A0 HL=006C SP=DED3 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7

; String # / bank #

[02000E] 400e 45          LD B,L           AF=0000 BC=0008 DE=A1A0 HL=006C SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02000F] 400f 5C          LD E,H           AF=0000 BC=6C08 DE=A1A0 HL=006C SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7

; Index into pointer table

[020010] 4010 CB 23       SLA E            AF=0000 BC=6C08 DE=A100 HL=006C SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020012] 4012 16 00       LD D,00h         AF=0044 BC=6C08 DE=A100 HL=006C SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020014] 4014 21 77 7B    LD HL,7B77h      AF=0044 BC=6C08 DE=0000 HL=006C SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020017] 4017 19          ADD HL,DE        AF=0044 BC=6C08 DE=0000 HL=7B77 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020018] 4018 4E          LD C,(HL)        AF=0044 BC=6C08 DE=0000 HL=7B77 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020019] 4019 23          INC HL           AF=0044 BC=6C91 DE=0000 HL=7B77 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02001A] 401a 66          LD H,(HL)        AF=0044 BC=6C91 DE=0000 HL=7B78 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02001B] 401b 69          LD L,C           AF=0044 BC=6C91 DE=0000 HL=4378 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02001C] 401c 04          INC B            AF=0044 BC=6C91 DE=0000 HL=4391 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[02001D] 401d 18 03       JR 4022h         AF=0028 BC=6D91 DE=0000 HL=4391 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7

; Sequential search - length / Huffman data

[02001F] 401f 5E          LD E,(HL)        AF=0028 BC=6C91 DE=0000 HL=4391 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020020] 4020 23          INC HL           AF=0028 BC=6C91 DE=000E HL=4391 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020021] 4021 19          ADD HL,DE        AF=0028 BC=6C91 DE=000E HL=4392 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7
[020022] 4022 10 FB       DJNZ 401Fh       AF=0028 BC=6D91 DE=0000 HL=4391 SP=DED1 IX=A1B2 IY=DEDF O    P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=09 frames=01b7

; Bump ptr to text

[020024] 4024 23          INC HL           AF=0000 BC=0091 DE=000D HL=4A89 SP=DED1 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020025] 4025 D1          POP DE           AF=0000 BC=0091 DE=000D HL=4A8A SP=DED1 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020026] 4026 C1          POP BC           AF=0000 BC=0091 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020027] 4027 C9          RET              AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED5 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; -------------------------------------------------------------

[020381] 4381 F5          PUSH AF          AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED5 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; EOS tree

[020382] 4382 3E DA       LD A,DAh         AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020384] 4384 32 A6 A1    LD (A1A6h),A     AF=DA00 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Init Huffman barrel

[020387] 4387 3E 80       LD A,80h         AF=DA00 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020389] 4389 32 A7 A1    LD (A1A7h),A     AF=8000 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Pointer

[02038C] 438c 22 A8 A1    LD (A1A8h),HL    AF=8000 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

[02038F] 438f F1          POP AF           AF=8000 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[020390] 4390 C9          RET              AF=0000 BC=0008 DE=A1A0 HL=4A8A SP=DED5 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; -------------------------------------------------------------

[0039DF] 39df C5          PUSH BC          AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DED5 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[0039E0] 39e0 D5          PUSH DE          AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[0039E1] 39e1 E5          PUSH HL          AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DED1 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Load Huffman parameters

[0039E2] 39e2 2A A8 A1    LD HL,(A1A8h)    AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7
[0039E5] 39e5 3A A7 A1    LD A,(A1A7h)     AF=0044 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1b frames=01b7

; Load Tree parameters

[0039E8] 39e8 D9          EXX              AF=8044 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7
[0039E9] 39e9 08          EX AF,AF'        AF=8044 BC=0000 DE=0000 HL=0000 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7
[0039EA] 39ea 3A A6 A1    LD A,(A1A6h)     AF=01A8 BC=0000 DE=0000 HL=0000 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7

; Save SRAM bank / switch to tree bank

[0039ED] 39ed E5          PUSH HL          AF=DAA8 BC=0000 DE=0000 HL=0000 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7
[0039EE] 39ee 21 FC FF    LD HL,FFFCh      AF=DAA8 BC=0000 DE=0000 HL=0000 SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7
[0039F1] 39f1 CB 9E       RES 3,(HL)       AF=DAA8 BC=0000 DE=0000 HL=FFFC SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=1c frames=01b7
[0039F3] 39f3 2E FF       LD L,FFh         AF=DAA8 BC=0000 DE=0000 HL=FFFC SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[0039F5] 39f5 36 0A       LD (HL),0Ah      AF=DAA8 BC=0000 DE=0000 HL=FFFF SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[0039F7] 39f7 E1          POP HL           AF=DAA8 BC=0000 DE=0000 HL=FFFF SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7

; Index into Huffman tree

[0039F8] 39f8 6F          LD L,A           AF=DAA8 BC=0000 DE=0000 HL=0000 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[0039F9] 39f9 26 20       LD H,20h         AF=DAA8 BC=0000 DE=0000 HL=00DA SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[0039FB] 39fb 29          ADD HL,HL        AF=DAA8 BC=0000 DE=0000 HL=20DA SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[0039FC] 39fc ED 4B 0A 80 LD BC,(800Ah)    AF=DA80 BC=0000 DE=0000 HL=41B4 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A00] 3a00 09          ADD HL,BC        AF=DA80 BC=59D0 DE=0000 HL=41B4 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A01] 3a01 7E          LD A,(HL)        AF=DA80 BC=59D0 DE=0000 HL=9B84 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A02] 3a02 23          INC HL           AF=C180 BC=59D0 DE=0000 HL=9B84 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A03] 3a03 66          LD H,(HL)        AF=C180 BC=59D0 DE=0000 HL=9B85 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A04] 3a04 6F          LD L,A           AF=C180 BC=59D0 DE=0000 HL=6785 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A05] 3a05 3C          INC A            AF=C180 BC=59D0 DE=0000 HL=67C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A06] 3a06 20 10       JR NZ,3A18h      AF=C280 BC=59D0 DE=0000 HL=67C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7

; ... (fail-safe)

; Switch to P2, setup barrel

[003A18] 3a18 CB B4       RES 6,H          AF=C280 BC=59D0 DE=0000 HL=67C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A1A] 3a1a CB FC       SET 7,H          AF=C280 BC=59D0 DE=0000 HL=27C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A1C] 3a1c 3E 80       LD A,80h         AF=C280 BC=59D0 DE=0000 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A1E] 3a1e 54          LD D,H           AF=8080 BC=59D0 DE=0000 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A1F] 3a1f 5D          LD E,L           AF=8080 BC=59D0 DE=A700 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7

; Symbol list ptr

[003A20] 3a20 1B          DEC DE           AF=8080 BC=59D0 DE=A7C1 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A21] 3a21 18 02       JR 3A25h         AF=8080 BC=59D0 DE=A7C0 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7

; Switch to tree mode

[003A23] 3a23 08          EX AF,AF'        AF=1B18 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A24] 3a24 D9          EXX              AF=0100 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Check if barrel empty

[003A25] 3a25 87          ADD A,A          AF=8080 BC=59D0 DE=A7C0 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1c frames=01b7
[003A26] 3a26 C2 2C 3A    JP NZ,3A2Ch      AF=0045 BC=59D0 DE=A7C0 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Reload tree barrel

[003A29] 3a29 7E          LD A,(HL)        AF=0045 BC=59D0 DE=A7C0 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A2A] 3a2a 23          INC HL           AF=0045 BC=59D0 DE=A7C0 HL=A7C1 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A2B] 3a2b 8F          ADC A,A          AF=0045 BC=59D0 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; 0 -> non-leaf node
; 1 -> leaf node

[003A2C] 3a2c 38 24       JR C,3A52h       AF=0100 BC=59D0 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Grab Huffman bit

[003A2E] 3a2e 08          EX AF,AF'        AF=0100 BC=59D0 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A2F] 3a2f D9          EXX              AF=8044 BC=59D0 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A30] 3a30 87          ADD A,A          AF=8044 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Check if barrel empty

[003A31] 3a31 C2 37 3A    JP NZ,3A37h      AF=0045 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Reload Huffman barrel

[003A34] 3a34 7E          LD A,(HL)        AF=0045 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A35] 3a35 23          INC HL           AF=0D45 BC=0008 DE=A1A0 HL=4A8A SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7
[003A36] 3a36 8F          ADC A,A          AF=0D45 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; 0 -> go left
; 1 -> go right

[003A37] 3a37 30 EA       JR NC,3A23h      AF=1B18 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1d frames=01b7

; Skip all symbols in left subtree

[003A39] 3a39 08          EX AF,AF'        AF=B0B1 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A3A] 3a3a D9          EXX              AF=1010 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A3B] 3a3b 0E 01       LD C,01h         AF=1010 BC=59D0 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A3D] 3a3d 87          ADD A,A          AF=1010 BC=5901 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A3E] 3a3e C2 44 3A    JP NZ,3A44h      AF=2020 BC=5901 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7

; Grab next tree node

[003A41] 3a41 7E          LD A,(HL)        AF=0045 BC=5904 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7
[003A42] 3a42 23          INC HL           AF=B345 BC=5904 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7
[003A43] 3a43 8F          ADC A,A          AF=B345 BC=5904 DE=A7C0 HL=A7C3 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7

; 0 -> another node to skip
; 1 -> leaf node found

[003A44] 3a44 38 04       JR C,3A4Ah       AF=2020 BC=5901 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A46] 3a46 0C          INC C            AF=2020 BC=5901 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7
[003A47] 3a47 C3 3D 3A    JP 3A3Dh         AF=2000 BC=5902 DE=A7C0 HL=A7C2 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1e frames=01b7

; Bypass leaf node / symbol

[003A4A] 3a4a 1B          DEC DE           AF=6725 BC=5904 DE=A7C0 HL=A7C3 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7
[003A4B] 3a4b 0D          DEC C            AF=6725 BC=5904 DE=A7BF HL=A7C3 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7
[003A4C] 3a4c C2 3D 3A    JP NZ,3A3Dh      AF=6703 BC=5903 DE=A7BF HL=A7C3 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=1f frames=01b7

; Continue decoding

[003A4F] 3a4f C3 25 3A    JP 3A25h         AF=0E43 BC=5900 DE=A7B1 HL=A7C6 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=23 frames=01b7

; Algorithm done - grab symbol

[003A52] 3a52 1A          LD A,(DE)        AF=3435 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=27 frames=01b7

; Restore registers

[003A53] 3a53 E5          PUSH HL          AF=4335 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=27 frames=01b7
[003A54] 3a54 21 FC FF    LD HL,FFFCh      AF=4335 BC=5900 DE=A7A9 HL=A7C8 SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=27 frames=01b7
[003A57] 3a57 CB DE       SET 3,(HL)       AF=4335 BC=5900 DE=A7A9 HL=FFFC SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=28000 [ROM]  vdp=01C0 vc=27 frames=01b7
[003A59] 3a59 E1          POP HL           AF=4335 BC=5900 DE=A7A9 HL=FFFC SP=DECD IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7

; Save state

[003A5A] 3a5a 08          EX AF,AF'        AF=4335 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A5B] 3a5b D9          EXX              AF=6025 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A5C] 3a5c 22 A8 A1    LD (A1A8h),HL    AF=6025 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A5F] 3a5f 32 A7 A1    LD (A1A7h),A     AF=6025 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A62] 3a62 D9          EXX              AF=6025 BC=0008 DE=A1A0 HL=4A8B SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A63] 3a63 08          EX AF,AF'        AF=6025 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A64] 3a64 32 A6 A1    LD (A1A6h),A     AF=4335 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7

[003A67] 3a67 E1          POP HL           AF=4335 BC=5900 DE=A7A9 HL=A7C8 SP=DECF IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A68] 3a68 D1          POP DE           AF=4335 BC=5900 DE=A7A9 HL=4A8A SP=DED1 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A69] 3a69 C1          POP BC           AF=4335 BC=5900 DE=A1A0 HL=4A8A SP=DED3 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7
[003A6A] 3a6a C9          RET              AF=4335 BC=0008 DE=A1A0 HL=4A8A SP=DED5 IX=A1B2 IY=DEDF      P0=00000 P1=20000 P2=00000 [SRAM]  vdp=01C0 vc=27 frames=01b7

; _____________________________________________________________

$23b77 = pointer table

Script:
[1] 020391 - 02121D (000E8C)
[2] 02121D - 022870 (001653)
[3] 022870 - 023C09 (001399)

Trees:
[Table] $299d0-29b85 ($db trees)
[Data1] $29bcd-2a7d1


Lists: $2b8f-3107